/*
 * parser.h
 *
 *  Created on: 30/08/2013
 *      Author: pellarolojuani
 */

#ifndef DELIMITADORES
#define DELIMITADORES ",.;: ¡!¿?\"<>(){}-_”[]'\n\t\b"
#endif /*DELIMITADORES*/

#ifndef MAX_POSICIONES_LINEA
#define MAX_POSICIONES_LINEA 200
#endif /* MAX_POSICIONES */

#ifndef PARSER_H_
#define PARSER_H_
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include "../Lexico/ArbolB.h"
#include "../Lexico/Termino.h"

//#include "Posiciones.h"

using namespace std;

class Parser {
public:
	Parser();
	string aMinuscula(string s);
	int getUltimaPosicion();
	int getNumeroPalabras();	//dudoso!
	int getCantidadDocumentos();
	void resetUltimaPosicion();
	string* parsearLinea(string str, int maxPosicionesLinea, int *canTerminos);
	void parsearArchivo(FILE* dirAct, int *terminosLinea, int *terminosDoc,
						abb::ArbolB<Termino, ORDEN_NODO> *lexico, int doc);
	void parsearArchivoIndependiente(FILE* dirAct, int *terminosLinea, int *terminosDoc,
						abb::ArbolB<Termino, ORDEN_NODO> *lexico);
	FILE* abrirArchivo( string unNombre);
	void contarTerminosArchivo(FILE* dirAct, int *terminosLinea, int* terminosDoc);

	void parsearDirectorio(char* directorioRuta, abb::ArbolB<Termino,ORDEN_NODO>* lexico);

	virtual ~Parser();

private:
	string delimitadores;
	int pos;
	int numeroPalabra;		//dudoso!
	string* STOP_WORDS;
	int cantDocumentos;
	long int *offsetnombreDocs;
	long int parserEOF;

	string sacarFinDeLinea(string s);
	bool esDelimitador(char c);
	bool esStopWord(string unTermino);
	bool esMayor3caracteres(string unTermino);
	vector<Termino> agruparTerminos(vector<Termino> listaTerminos);
	int contarDocumentosDeDirectorio(char *unDirectorio);

};

#endif /* PARSER_H_ */
